package com.qms.qep.service;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.springframework.web.multipart.MultipartFile;

import com.qms.common.core.domain.AjaxResult;
import com.qms.qep.domain.CertificateTemplate;
import com.qms.qep.domain.TemplateVariable;

/**
 * 证书模板服务接口
 */
public interface ICertificateTemplateService {
    
    /**
     * 查询证书模板列表
     * 
     * @param certificateTemplate 查询条件
     * @return 证书模板列表
     */
    public List<CertificateTemplate> selectCertificateTemplateList(CertificateTemplate certificateTemplate);
    
    /**
     * 根据ID查询证书模板
     * 
     * @param id 证书模板ID
     * @return 证书模板
     */
    public CertificateTemplate selectCertificateTemplateById(Long id);
    
    /**
     * 新增证书模板
     * 
     * @param certificateTemplate 证书模板信息
     * @return 结果
     */
    public int insertCertificateTemplate(CertificateTemplate certificateTemplate);
    
    /**
     * 修改证书模板
     * 
     * @param certificateTemplate 证书模板信息
     * @return 结果
     */
    public int updateCertificateTemplate(CertificateTemplate certificateTemplate);
    
    /**
     * 批量删除证书模板
     * 
     * @param ids 需要删除的证书模板ID
     * @return 结果
     */
    public int deleteCertificateTemplateByIds(Long[] ids);
    
    /**
     * 上传证书模板文件
     * 
     * @param file 文件
     * @param name 名称
     * @param type 类型
     * @param remark 备注
     * @return 结果
     */
    public AjaxResult uploadTemplateFile(MultipartFile file, String name, String type, String remark);
    
    /**
     * 预览模板
     * 
     * @param id 模板ID
     * @return 预览结果
     */
    public AjaxResult previewTemplate(Long id);
    
    /**
     * 预览DOCX模板为HTML内容
     *
     * @param templateId 模板ID
     * @return HTML字符串
     * @throws Exception 处理异常
     */
    public String previewDocxAsHtml(Long templateId) throws Exception;

    /**
     * 替换已存在的DOCX模板文件
     *
     * @param templateId 模板ID
     * @param file 新的DOCX文件
     * @return 结果，包含更新后的文件URL和版本号
     * @throws java.io.IOException 文件操作异常
     */
    public AjaxResult replaceDocxTemplate(Long templateId, MultipartFile file) throws java.io.IOException;
    
    /**
     * 查询模板变量列表
     * 
     * @param templateId 模板ID
     * @return 变量列表
     */
    public List<TemplateVariable> selectTemplateVariables(Long templateId);
    
    /**
     * 保存模板变量
     * 
     * @param variables 变量列表
     * @return 结果
     */
    public int saveTemplateVariables(List<TemplateVariable> variables);
    
    /**
     * 获取Word模板内容
     * 
     * @param id 模板ID
     * @return Word内容
     */
    public AjaxResult getWordContent(Long id);
    
    /**
     * 保存Word模板内容
     * 
     * @param template 包含内容的模板信息
     * @return 结果
     */
    public AjaxResult saveWordContent(CertificateTemplate template);
    
    /**
     * 导出PDF证书
     * 
     * @param id 模板ID
     * @param variables 模板变量值映射
     * @return PDF文件字节数组
     */
    public AjaxResult exportToPdf(Long id, Map<String, Object> variables);
    
    /**
     * 解析Word文档为HTML
     * 
     * @param file Word文档文件
     * @return HTML内容
     * @throws Exception 处理异常
     */
    public String parseWordToHtml(MultipartFile file) throws Exception;
    
    /**
     * 解析Excel文档为HTML
     * 
     * @param file Excel文档文件
     * @return HTML内容
     * @throws Exception 处理异常
     */
    public String parseExcelToHtml(MultipartFile file) throws Exception;
    
    /**
     * 解析PowerPoint文档为HTML
     * 
     * @param file PowerPoint文档文件
     * @return HTML内容
     * @throws Exception 处理异常
     */
    public String parsePptToHtml(MultipartFile file) throws Exception;
    
    /**
     * 解析PDF文档为HTML
     * 
     * @param file PDF文档文件
     * @return HTML内容
     * @throws Exception 处理异常
     */
    public String parsePdfToHtml(MultipartFile file) throws Exception;
    
    /**
     * 获取模板文件内容
     * 
     * @param filePath 文件路径
     * @return 文件内容字节数组
     * @throws IOException 如果读取文件失败
     */
    public byte[] getTemplateFileContent(String filePath) throws IOException;
} 